tool
extends EditorScript

# 随机一个概率
# 执行代码
func _run() -> void:
	# 让每次执行的随机都不同
	randomize()
	
	var value_list = [1, 2, 3, 4, 5]
	var probability_list = [0.5, 0.3, 0.7, 0.1, 0.3]
	
	# 存到字典中，计算对应 value 出现的次数
	var data = {}
	for value in value_list:
		data[value] = 0
	
	# 循环获取 50 次
	var value = 0
	for i in range(0, 50):
		value = _get_value(value_list, probability_list)
		data[value] += 1
	
	# 格式化输出 数据
	print(JSON.print(data, "\t"))


##  返回对应概率的值
## @value_list  值列表
## @probability_list  概率列表
func _get_value(
	value_list : Array,
	probability_list: Array
):
	# 两个列表的值的个数应相同
	if value_list.size() != probability_list.size():
		print("数量不一致")
		return null
	
	# 累加概率值，计算概率总和
	# 每次累加存到列表中作为概率区间
	var sum = 0.0
	var p_list = []	# 概率列表
	for i in probability_list:
		sum += i
		p_list.push_back(sum)
	
	# 产生一个 [0, 概率总和) 之间的随机值
	# 概率区间越大的值，则随机到的概率越大
	# 则就实现了每个值的随机值
	var r = randf() * sum
	var idx = 0
	for p in p_list:
		# 当前概率超过或等于随机的概率，则返回
		if p >= r:
			return value_list[idx]
		idx += 1
	
	return null


